package com.两个栈实现队列and两个队列实现栈.两个队列实现栈;

import java.util.Stack;

/**有一种方案是这样的：两个栈严格区分开来使用，一个专门用来做插入（插入栈），一个专门用来做弹出（弹出栈）。这样在做插入的时候什么都不需要做，
 * 直接调用插入栈的push方法就可以了。但是在弹出的时候就要麻烦一点，先判断在弹出栈中是否包含数据，如果包含，直接从顶部弹出，如果不包含，把插
 * 入栈中的元素挨个导入到弹出栈中。然后再从栈顶将第一个元素弹出。
 * @author DELL
 *
 */
public class MyQueue {

	private Stack<Integer> in = new Stack<>();
	private Stack<Integer> out = new Stack<>();

    public void push(int x) {
    	in.push(x);
	}

	public int pop() {
		if (!out.empty()) {
			return out.pop();
		} else {
			if (in.empty()) {
				return -1;
			} else {
				while (!in.empty()) {
					out.push(in.pop());
				}
				return out.pop();
			}
		}
	}

	public static void main(String[] args) {
		MyQueue q = new MyQueue();
		q.push(12);
		q.push(100);
		q.push(24);
		System.out.println(q.pop());
		System.out.println(q.pop());
		q.push(1);
		q.push(14);
		System.out.println(q.pop());
		System.out.println(q.pop());
		System.out.println(q.pop());
	}

}
